#include <unistd.h>
#include <stdio.h>
#include <sys/types.h>

int main(int argc, char const *argv[])
{
    printf("main(父)进程(%d)开始执行 \n", getpid());
    int val = 100;
    // 创建一个子进程
    /*
    fork(): 内部创建子进程
        创建失败， 返回-1
        创建成功(子进程内存是拷贝父进程的内存)，返回0子进程的pid内核会依次执行父进程和子进程
        如果执行父进程，返回子进程的pid
        如果执行子进程，返回0
    */
    pid_t pid = fork();
    if (pid == -1)
    {
        printf("创建子进程失败 \n");
        return -1;
    } else if (pid == 0)
    {
        val++;
        printf("子进程(%d)开始执行, 父进程id=%d, val=%d, val地址=%p \n", getpid(),  getppid(), val, &val); // 101
    } else {
        val--;
        printf("父进程(%d)继续执行, 子进程id=%d, val=%d, val地址=%p \n", getpid(), pid, val, &val); //99
        sleep(1);
    }

    printf("进程(%d)执行结束 \n", getpid());

    return 0;
}
